if (typeof Fai == "undefined") {
    Fai = {};
    Fai.top = top
}
Fai.encodeHtml = function(a) {
    return a && a.replace ? (a.replace(/&/g, "&amp;").replace(/ /g, "&nbsp;").replace(/\b&nbsp;+/g, " ").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\\/g, "&#92;").replace(/\'/g, "&#39;").replace(/\"/g, "&quot;").replace(/\n/g, "<br/>").replace(/\r/g, "")) : a
}
;
(function($) {
    var escape = /["\\\x00-\x1f\x7f-\x9f]/g
        , meta = {
            "\b": "\\b",
            "\t": "\\t",
            "\n": "\\n",
            "\f": "\\f",
            "\r": "\\r",
            '"': '\\"',
            "\\": "\\\\"
        }
        , hasOwn = Object.prototype.hasOwnProperty;
    $.toJSON = function(o) {
        if (o === null ) {
            return "null"
        }
        var pairs, k, name, val, type = $.type(o);
        if (type === "undefined") {
            return undefined
        }
        if (type === "number" || type === "boolean") {
            return String(o)
        }
        if (type === "string") {
            return $.quoteString(o)
        }
        if (typeof o.toJSON === "function") {
            return $.toJSON(o.toJSON())
        }
        if (type === "date") {
            var month = o.getUTCMonth() + 1
                , day = o.getUTCDate()
                , year = o.getUTCFullYear()
                , hours = o.getUTCHours()
                , minutes = o.getUTCMinutes()
                , seconds = o.getUTCSeconds()
                , milli = o.getUTCMilliseconds();
            if (month < 10) {
                month = "0" + month
            }
            if (day < 10) {
                day = "0" + day
            }
            if (hours < 10) {
                hours = "0" + hours
            }
            if (minutes < 10) {
                minutes = "0" + minutes
            }
            if (seconds < 10) {
                seconds = "0" + seconds
            }
            if (milli < 100) {
                milli = "0" + milli
            }
            if (milli < 10) {
                milli = "0" + milli
            }
            return '"' + year + "-" + month + "-" + day + "T" + hours + ":" + minutes + ":" + seconds + "." + milli + 'Z"'
        }
        pairs = [];
        if ($.isArray(o)) {
            for (k = 0; k < o.length; k++) {
                pairs.push($.toJSON(o[k]) || "null")
            }
            return "[" + pairs.join(",") + "]"
        }
        if (typeof o === "object") {
            for (k in o) {
                if (hasOwn.call(o, k)) {
                    type = typeof k;
                    if (type === "number") {
                        name = '"' + k + '"'
                    } else {
                        if (type === "string") {
                            name = $.quoteString(k)
                        } else {
                            continue
                        }
                    }
                    type = typeof o[k];
                    if (type !== "function" && type !== "undefined") {
                        val = $.toJSON(o[k]);
                        pairs.push(name + ":" + val)
                    }
                }
            }
            return "{" + pairs.join(",") + "}"
        }
    }
    ;
    $.evalJSON = typeof JSON === "object" && JSON.parse ? JSON.parse : function(str) {
        return eval("(" + str + ")")
    }
    ;
    $.secureEvalJSON = typeof JSON === "object" && JSON.parse ? JSON.parse : function(str) {
        var filtered = str.replace(/\\["\\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, "");
        if (/^[\],:{}\s]*$/.test(filtered)) {
            return eval("(" + str + ")")
        }
        throw new SyntaxError("Error parsing JSON, source is not valid.")
    }
    ;
    $.quoteString = function(str) {
        if (str.match(escape)) {
            return '"' + str.replace(escape, function(a) {
                    var c = meta[a];
                    if (typeof c === "string") {
                        return c
                    }
                    c = a.charCodeAt();
                    return "\\u00" + Math.floor(c / 16).toString(16) + (c % 16).toString(16)
                }) + '"'
        }
        return '"' + str + '"'
    }
}(jQuery));
